Application-Log mit Kontext

Mit dem Application-Log lassen sich standardisiert Meldungen sammeln und ausgeben. Was viele nicht wissen: die Meldungen können um eigene Felder erweitert werden. Die Zusatzinformationen werden im KONTEXT gespeichert. Dieser Kontext muss definiert und natürlich separat gefüllt werden.

Im Demoprogramm SBAL_DEMO_02 kannst du nachvollziehen, wie die Programmierung erfolgen muss.

Kontext

Mit Kontext sind zusätzliche Felder gemeint, die zusätzlich zu jeder Meldung gesetzt werden können. Auf diese Weise lassen sich Meldungen besser gruppieren oder darstellen. Zudem können Meldungen an sich kürzer ausfallen. Häufig wird ein Protokoll für eine Vielzahl von gleichen Objekten erstellt (Materialnummern, Werke, Kunden, Belegnummer etc.) Anstelle der Meldung “Prüfung für Material &1 (Werk &2) und Charge &3 wurde erfolgreich beendet.” könnten die Felder Materialnummer, Werk und Charge in einem Kontext gespeichert werden. Die Meldung lautet dann nur noch “Chargenprüfung erfolgreich.”.

Als Kontext muss eine eigene Struktur verwendet werden. Im Demoprogramm wird die Struktur BAL_S_EX01 verwendet:

Verwendung der Felder: Meldung hinzufügen

Um eine Meldung dem Meldungsprotokoll hinzuzufügen, ruft man den Baustein  BAL_LOG_MSG_ADD auf:

ls_msg-msgty = sy-msgty.
ls_msg-msgid = sy-msgid.
ls_msg-msgno = sy-msgno.
ls_msg-msgv1 = sy-msgv1.
ls_msg-msgv2 = sy-msgv2.
ls_msg-msgv3 = sy-msgv3.
ls_msg-msgv4 = sy-msgv4.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
  EXPORTING
    i_s_msg = ls_msg.

In LS_MSG hat man die Meldungsnummer, Meldungs-ID und Meldungstyp sowie die vier Meldungsvariablen gespeichert. Möchte man den Kontext verwenden, dann muss auch das Feld LS_MSG-CONTEXT gefüllt werden:

DATA ls_msg     TYPE bal_s_msg.
DATA ls_context TYPE bal_s_ex01.

* define context information
 ls_context-carrid      = i_carrid.
 ls_context-connid      = i_connid.
 ls_context-fldate      = i_fldate.
 ls_msg-context-tabname = 'BAL_S_EX01'.
 ls_msg-context-value   = ls_context.

So kann für jede Meldung ein eigenes Set an Feldern mitgegeben werden.

Verwendung der Felder: Anzeige

Die Kontext-Felder werden nicht automatisch angezeigt, sondern müssen im Feldkatalog definiert werden. Damit die zusätzlichen Felder im Protokoll auftauchen, musst du sie im Display Profile hinzufügen. Mit dem Funktionsbaustein BAL_DSP_PROFILE_SINGLE_LOG_GET kannst du ein Standard-Anzeigeprofil laden und den Feldkatalog entsprechend erweitern:

* add passenger ID to message table
 l_s_fcat-ref_table = 'BAL_S_EX01'.
 l_s_fcat-ref_field = 'ID'.
 l_s_fcat-col_pos = 100.
 APPEND l_s_fcat TO l_s_display_profile-mess_fcat.

Verwendung der Felder: Baumanzeige

Ein Stärke des Application-Log ist die Darstellung der Meldung in einer Baumstruktur. Hierfür müssen die einzelnen Ebenen genau definiert werden. Das folgende Beispiel zeigt eine Aufteilung nach Fluglinien und Flügen:

Das Coding dafür definiert den Feldkatalog und die Sortierung für die einzelnen Ebenen. LEV1_FCAT und LEV1_SORT definieren die Felder und die Sortierung für die oberste Ebene, LEV2* für die zweite und so weiter.

 l_s_fcat-ref_table = 'BAL_S_EX01'.
 l_s_fcat-ref_field = 'ID'.
 l_s_fcat-col_pos   = 1.
 APPEND l_s_fcat TO l_s_display_profile-lev2_fcat.
 l_s_sort-ref_table = 'BAL_S_EX01'.
 l_s_sort-ref_field = 'ID'.
 l_s_sort-up        = 'X'.
 l_s_sort-spos      = 1.
 APPEND l_s_sort TO l_s_display_profile-lev2_sort.
 l_s_fcat-ref_table = 'BAL_S_SHOW'.
 l_s_fcat-ref_field = 'T_MSGTY'.
 l_s_fcat-col_pos   = 1.
 APPEND l_s_fcat TO l_s_display_profile-lev1_fcat.
 l_s_sort-ref_table = 'BAL_S_SHOW'.
 l_s_sort-ref_field = 'T_MSGTY'.
 l_s_sort-up        = 'X'.
 l_s_sort-spos      = 1.
 APPEND l_s_sort TO l_s_display_profile-lev1_sort.

Auf diese Weise ist eine schöne und ansprechende Darstellung von Meldungen leicht möglich.

Folgende Felder des Anzeigeprofils haben Einfluss auf die Baumdarstellung:

Das Feld TREE_ONTOP definiert, ob der Baum oben (TREE_ONTOP = X) oder links angezeigt wird (TREE_ONTOP = space).

Mit TREE_SIZE kann die Größe des Tree-Containers definiert werden.

Enno Wulff

COMMENTS

  • <cite class="fn">abapkadabra</cite>

    Ich hatte mir die Kontextmöglichkeit vor längerer Zeit mal angesehen, aber das war in Vergessenheit geraten… jetzt hätte ich einige praktische Anwendungsmöglichkeiten. Danke für die Wissensauffrischung!

    Hast Du eigentlich auch praktische Beispiele für die CALLBACK-Funktionalität?

    • <cite class="fn">Enno Wulff</cite>

      Callback-Funktionalität ist glaube ich im gleichen Programm ebenfalls enthalten.
      Ansonsten eines der anderen SBAL_DEMO*-Programme.

Comments are closed.